package com.wmx.mp.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * <p>
 *
 * </p>
 *
 * @author 汪茂雄
 * @since 2023-04-01
 */
public class Emp implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 雇员编号
     * 1、mybatis-plus 默认会以实体中名叫'id'的属性作为数据库表的主键映射，当命名不规范时，必须使用 @TableId 明确指定主键属性对应的数据库表主键名称。
     * 否则启动就会有日志警告：
     * Can not find table primary key in Class: "com.wmx.mp.pojo.BasUser".
     * Not found @TableId annotation, Cannot use Mybatis-Plus 'xxById' Method.
     * 2、@TableId 注解 value 属性：字段名称，实体属性名称与数据库表列名能对应上时，可以省略，否则需要明确指定为数据表的列名。
     * 3、@TableId 注解 type 属性：主键类型。不单独指定时，会使用全局配置 mybatis-plus.global-config.db-config.id-type
     * # AUTO：数据库ID自增，需要确保数据库设置了 ID自增 否则无效；
     * # NONE：该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
     * # INPUT: 用户输入ID，通过自己注册自动填充插件进行填充。
     * # ASSIGN_ID：当插入对象ID为空时，使用雪花算法自动填充分配ID(主键类型为number或string）
     * # ASSIGN_UUID：当插入对象ID为空时，使用UUID.replace("-","")自动填充分配ID(主键类型为string）
     */
    @TableId(value = "emp_no", type = IdType.ASSIGN_ID)
    private Integer empNo;

    /**
     * 雇员姓名
     */
    private String name;

    /**
     * 雇员职位
     */
    private String job;

    /**
     * 雇佣日期
     */
    private LocalDateTime hireDate;

    /**
     * 薪水
     */
    private BigDecimal sal;

    /**
     * 奖金或补助
     */
    private BigDecimal comm;

    /**
     * 所属部门编号
     */
    private Integer deptNo;

    /**
     * 创建日期
     * 1、fill-字段自动填充策略：插入时自动填充字段值，无需手动处理。
     * 2、需要自动填充时：字段必须声明TableField注解,属性fill选择对应策略,该声明告知Mybatis-Plus需要预留注入SQL字段
     * 同时提供 {@link MetaObjectHandler}-元对象字段填充控制器，实现公共字段自动写入。
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 更新日期
     * fill-字段自动填充策略：插入和更新时自动填充字段值，无需手动处理。
     * 同时提供 {@link MetaObjectHandler}-元对象字段填充控制器，实现公共字段自动写入。
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 是否删除(1是2否)
     * 1、@TableLogic：表字段逻辑处理注解（逻辑删除），用于标记在逻辑删除的字段上。
     * 2、字段类型支持所有数据类型(推荐使用 Integer,Boolean,Date)
     * 3、当省略时，默认使用全局配置：
     * * mybatis-plus.global-config.db-config.logic-delete-field
     * * mybatis-plus.global-config.db-config.logic-delete-value
     * * mybatis-plus.global-config.db-config.logic-not-delete-value
     */
    @TableLogic(value = "2", delval = "1")
    private Integer deleted;

    /**
     * 数据版本号
     * mp 乐观锁注解：@Version
     */
    @Version
    private Integer version;

    public Integer getEmpNo() {
        return empNo;
    }

    public void setEmpNo(Integer empNo) {
        this.empNo = empNo;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getJob() {
        return job;
    }

    public void setJob(String job) {
        this.job = job;
    }

    public LocalDateTime getHireDate() {
        return hireDate;
    }

    public void setHireDate(LocalDateTime hireDate) {
        this.hireDate = hireDate;
    }

    public BigDecimal getSal() {
        return sal;
    }

    public void setSal(BigDecimal sal) {
        this.sal = sal;
    }

    public BigDecimal getComm() {
        return comm;
    }

    public void setComm(BigDecimal comm) {
        this.comm = comm;
    }

    public Integer getDeptNo() {
        return deptNo;
    }

    public void setDeptNo(Integer deptNo) {
        this.deptNo = deptNo;
    }

    public LocalDateTime getCreateTime() {
        return createTime;
    }

    public void setCreateTime(LocalDateTime createTime) {
        this.createTime = createTime;
    }

    public LocalDateTime getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(LocalDateTime updateTime) {
        this.updateTime = updateTime;
    }

    public Integer getDeleted() {
        return deleted;
    }

    public void setDeleted(Integer deleted) {
        this.deleted = deleted;
    }

    public Integer getVersion() {
        return version;
    }

    public void setVersion(Integer version) {
        this.version = version;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "empNo=" + empNo +
                ", name='" + name + '\'' +
                ", job='" + job + '\'' +
                ", hireDate=" + hireDate +
                ", sal=" + sal +
                ", comm=" + comm +
                ", deptNo=" + deptNo +
                ", createTime=" + createTime +
                ", updateTime=" + updateTime +
                ", deleted=" + deleted +
                ", version=" + version +
                '}';
    }
}
